package app

import (
	"errors"
	"go.uber.org/zap/zapcore"
	"shop-common/library/logger"
	"shop-common/library/variables"
)

// 初始化application--日志部分
func initApplication(appName string) error {
	if variables.LoggerSetting == nil {
		return errors.New("loggerSetting CopyStruct fail")
	}

	//zapLog, err := zapFactory.NewLogger(variables.LoggerSetting).BeforeLogger("err")
	//if err != nil {
	//	return err
	//}
	//variables.ErrLogger = zapLog.CreateZapLogger(zapLogHandler)
	//
	//zapLog, err = zapFactory.NewLogger(variables.LoggerSetting).BeforeLogger("access")
	//if err != nil {
	//	return err
	//}
	//variables.AccessLogger = zapLog.CreateZapLogger(zapLogHandler)

	l, err := logger.NewLogger(variables.LoggerSetting.RootPath, "info", appName)
	if err != nil {
		return err
	}
	variables.Logger = l

	return nil
}

// GoSkeleton 系统运行日志钩子函数
// 1.单条日志就是一个结构体格式，本函数拦截每一条日志，您可以进行后续处理，例如：推送到阿里云日志管理面板、ElasticSearch 日志库等
func zapLogHandler(entry zapcore.Entry) error {
	// 参数 entry 介绍
	// entry  参数就是单条日志结构体，主要包括字段如下：
	//Level      日志等级
	//Time       当前时间
	//LoggerName  日志名称
	//Message    日志内容
	//Caller     各个文件调用路径
	//Stack      代码调用栈

	//这里启动一个协程，hook丝毫不会影响程序性能，
	go func(paramEntry zapcore.Entry) {
		//fmt.Println(" GoSkeleton  hook ....，你可以在这里继续处理系统日志....")
		//fmt.Printf("%#+v\n", paramEntry)
	}(entry)
	return nil
}
